home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Interfaces / PInterfaces / SoundInput.p < prev    next >
Encoding:
Text File  |  1994-11-11  |  9.2 KB  |  260 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        SoundInput.p
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a3  ETO #16, MPW prerelease.  Friday, November 11, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. }
  16.  
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT SoundInput;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __SOUNDINPUT__}
  27. {$SETC __SOUNDINPUT__ := 1}
  28.  
  29. {$I+}
  30. {$SETC SoundInputIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {    ConditionalMacros.p                                            }
  38.  
  39. {$IFC UNDEFINED __DIALOGS__}
  40. {$I Dialogs.p}
  41. {$ENDC}
  42. {    Errors.p                                                    }
  43. {    Memory.p                                                    }
  44. {        MixedMode.p                                                }
  45. {    Windows.p                                                    }
  46. {        Quickdraw.p                                                }
  47. {            QuickdrawText.p                                        }
  48. {        Events.p                                                }
  49. {            OSUtils.p                                            }
  50. {        Controls.p                                                }
  51. {            Menus.p                                                }
  52. {    TextEdit.p                                                    }
  53.  
  54. {$IFC UNDEFINED __FILES__}
  55. {$I Files.p}
  56. {$ENDC}
  57.  
  58. {$IFC UNDEFINED __SOUND__}
  59. {$I Sound.p}
  60. {$ENDC}
  61.  
  62. {$PUSH}
  63. {$ALIGN MAC68K}
  64. {$LibExport+}
  65.  
  66. CONST
  67.     siDeviceIsConnected            = 1;                            {input device is connected and ready for input}
  68.     siDeviceNotConnected        = 0;                            {input device is not connected}
  69.     siDontKnowIfConnected        = -1;                            {can't tell if input device is connected}
  70.     siReadPermission            = 0;                            {permission passed to SPBOpenDevice}
  71.     siWritePermission            = 1;                            {permission passed to SPBOpenDevice}
  72.  
  73. {Info Selectors for Sound Input Drivers}
  74.     siDeviceConnected            = 'dcon';                        {input device connection status}
  75.     siAGCOnOff                    = 'agc ';                        {automatic gain control state}
  76.     siPlayThruOnOff                = 'plth';                        {playthrough state}
  77.     siTwosComplementOnOff        = 'twos';                        {two's complement state}
  78.     siLevelMeterOnOff            = 'lmet';                        {level meter state}
  79.     siRecordingQuality            = 'qual';                        {recording quality}
  80.     siVoxRecordInfo                = 'voxr';                        {VOX record parameters}
  81.     siVoxStopInfo                = 'voxs';                        {VOX stop parameters}
  82.     siNumberChannels            = 'chan';                        {current number of channels}
  83.     siSampleSize                = 'ssiz';                        {current sample size}
  84.     siSampleRate                = 'srat';                        {current sample rate}
  85.     siCompressionType            = 'comp';                        {current compression type}
  86.     siCompressionFactor            = 'cmfa';                        {current compression factor}
  87.     siCompressionHeader            = 'cmhd';                        {return compression header}
  88.     siDeviceName                = 'name';                        {input device name}
  89.     siDeviceIcon                = 'icon';                        {input device icon}
  90.     siDeviceBufferInfo            = 'dbin';                        {size of interrupt buffer}
  91.     siSampleSizeAvailable        = 'ssav';                        {sample sizes available}
  92.     siSampleRateAvailable        = 'srav';                        {sample rates available}
  93.     siCompressionAvailable        = 'cmav';                        {compression types available}
  94.     siChannelAvailable            = 'chav';                        {number of channels available}
  95.     siAsync                        = 'asyn';                        {asynchronous capability}
  96.     siOptionsDialog                = 'optd';                        {display options dialog}
  97.     siContinuous                = 'cont';                        {continous recording}
  98.     siActiveChannels            = 'chac';                        {active channels}
  99.     siActiveLevels                = 'lmac';                        {active meter levels}
  100.     siInputSource                = 'sour';                        {input source selector}
  101.     siInputSourceNames            = 'snam';                        {input source names}
  102.     siInputGain                    = 'gain';                        {input gain}
  103.     siInitializeDriver            = 'init';                        {reserved for internal use only}
  104.     siCloseDriver                = 'clos';                        {reserved for internal use only}
  105.     siPauseRecording            = 'paus';                        {reserved for internal use only}
  106.     siUserInterruptProc            = 'user';                        {reserved for internal use only}
  107. {Qualities}
  108.     siBestQuality                = 'best';
  109.     siBetterQuality                = 'betr';
  110.     siGoodQuality                = 'good';
  111.  
  112.     
  113. TYPE
  114.     SPBPtr = ^SPB;
  115.  
  116. {user procedures called by sound input routines}
  117.     {
  118.         SIInterruptProcPtr uses register based parameters on the 68k and cannot
  119.         be written in or called from a high-level language without the help of
  120.         mixed mode or assembly glue.
  121.  
  122.         In:
  123.          => inParamPtr      A0.L
  124.          => dataBuffer      A1.L
  125.          => peakAmplitude    D0.W
  126.          => sampleSize      D1.L
  127.     }
  128.     SIInterruptProcPtr = ProcPtr;  { PROCEDURE SIInterrupt(inParamPtr: SPBPtr; dataBuffer: Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT); }
  129.     SICompletionProcPtr = ProcPtr;  { PROCEDURE SICompletion(inParamPtr: SPBPtr); }
  130.     SIInterruptUPP = UniversalProcPtr;
  131.     SICompletionUPP = UniversalProcPtr;
  132.  
  133.     SPB = RECORD
  134.         inRefNum:                LONGINT;                                {reference number of sound input device}
  135.         count:                    LONGINT;                                {number of bytes to record}
  136.         milliseconds:            LONGINT;                                {number of milliseconds to record}
  137.         bufferLength:            LONGINT;                                {length of buffer in bytes}
  138.         bufferPtr:                Ptr;                                    {buffer to store sound data in}
  139.         completionRoutine:        SICompletionUPP;                        {completion routine}
  140.         interruptRoutine:        SIInterruptUPP;                            {interrupt routine}
  141.         userLong:                LONGINT;                                {user-defined field}
  142.         error:                    OSErr;                                    {error}
  143.         unused1:                LONGINT;                                {reserved - must be zero}
  144.     END;
  145.  
  146. FUNCTION SPBVersion: NumVersion;
  147.     {$IFC NOT GENERATINGCFM}
  148.     INLINE $203C, $0000, $0014, $A800;
  149.     {$ENDC}
  150. FUNCTION SndRecord(filterProc: ModalFilterUPP; corner: Point; quality: OSType; VAR sndHandle: SndListHandle): OSErr;
  151.     {$IFC NOT GENERATINGCFM}
  152.     INLINE $203C, $0804, $0014, $A800;
  153.     {$ENDC}
  154. FUNCTION SndRecordToFile(filterProc: ModalFilterUPP; corner: Point; quality: OSType; fRefNum: INTEGER): OSErr;
  155.     {$IFC NOT GENERATINGCFM}
  156.     INLINE $203C, $0708, $0014, $A800;
  157.     {$ENDC}
  158. FUNCTION SPBSignInDevice(deviceRefNum: INTEGER; deviceName: ConstStr255Param): OSErr;
  159.     {$IFC NOT GENERATINGCFM}
  160.     INLINE $203C, $030C, $0014, $A800;
  161.     {$ENDC}
  162. FUNCTION SPBSignOutDevice(deviceRefNum: INTEGER): OSErr;
  163.     {$IFC NOT GENERATINGCFM}
  164.     INLINE $203C, $0110, $0014, $A800;
  165.     {$ENDC}
  166. FUNCTION SPBGetIndexedDevice(count: INTEGER; VAR deviceName: Str255; VAR deviceIconHandle: Handle): OSErr;
  167.     {$IFC NOT GENERATINGCFM}
  168.     INLINE $203C, $0514, $0014, $A800;
  169.     {$ENDC}
  170. FUNCTION SPBOpenDevice(deviceName: ConstStr255Param; permission: INTEGER; VAR inRefNum: LONGINT): OSErr;
  171.     {$IFC NOT GENERATINGCFM}
  172.     INLINE $203C, $0518, $0014, $A800;
  173.     {$ENDC}
  174. FUNCTION SPBCloseDevice(inRefNum: LONGINT): OSErr;
  175.     {$IFC NOT GENERATINGCFM}
  176.     INLINE $203C, $021C, $0014, $A800;
  177.     {$ENDC}
  178. FUNCTION SPBRecord(inParamPtr: SPBPtr; asynchFlag: BOOLEAN): OSErr;
  179.     {$IFC NOT GENERATINGCFM}
  180.     INLINE $203C, $0320, $0014, $A800;
  181.     {$ENDC}
  182. FUNCTION SPBRecordToFile(fRefNum: INTEGER; inParamPtr: SPBPtr; asynchFlag: BOOLEAN): OSErr;
  183.     {$IFC NOT GENERATINGCFM}
  184.     INLINE $203C, $0424, $0014, $A800;
  185.     {$ENDC}
  186. FUNCTION SPBPauseRecording(inRefNum: LONGINT): OSErr;
  187.     {$IFC NOT GENERATINGCFM}
  188.     INLINE $203C, $0228, $0014, $A800;
  189.     {$ENDC}
  190. FUNCTION SPBResumeRecording(inRefNum: LONGINT): OSErr;
  191.     {$IFC NOT GENERATINGCFM}
  192.     INLINE $203C, $022C, $0014, $A800;
  193.     {$ENDC}
  194. FUNCTION SPBStopRecording(inRefNum: LONGINT): OSErr;
  195.     {$IFC NOT GENERATINGCFM}
  196.     INLINE $203C, $0230, $0014, $A800;
  197.     {$ENDC}
  198. FUNCTION SPBGetRecordingStatus(inRefNum: LONGINT; VAR recordingStatus: INTEGER; VAR meterLevel: INTEGER; VAR totalSamplesToRecord: LONGINT; VAR numberOfSamplesRecorded: LONGINT; VAR totalMsecsToRecord: LONGINT; VAR numberOfMsecsRecorded: LONGINT): OSErr;
  199.     {$IFC NOT GENERATINGCFM}
  200.     INLINE $203C, $0E34, $0014, $A800;
  201.     {$ENDC}
  202. FUNCTION SPBGetDeviceInfo(inRefNum: LONGINT; infoType: OSType; infoData: UNIV Ptr): OSErr;
  203.     {$IFC NOT GENERATINGCFM}
  204.     INLINE $203C, $0638, $0014, $A800;
  205.     {$ENDC}
  206. FUNCTION SPBSetDeviceInfo(inRefNum: LONGINT; infoType: OSType; infoData: UNIV Ptr): OSErr;
  207.     {$IFC NOT GENERATINGCFM}
  208.     INLINE $203C, $063C, $0014, $A800;
  209.     {$ENDC}
  210. FUNCTION SPBMillisecondsToBytes(inRefNum: LONGINT; VAR milliseconds: LONGINT): OSErr;
  211.     {$IFC NOT GENERATINGCFM}
  212.     INLINE $203C, $0440, $0014, $A800;
  213.     {$ENDC}
  214. FUNCTION SPBBytesToMilliseconds(inRefNum: LONGINT; VAR byteCount: LONGINT): OSErr;
  215.     {$IFC NOT GENERATINGCFM}
  216.     INLINE $203C, $0444, $0014, $A800;
  217.     {$ENDC}
  218. FUNCTION SetupSndHeader(sndHandle: SndListHandle; numChannels: INTEGER; sampleRate: UnsignedFixed; sampleSize: INTEGER; compressionType: OSType; baseNote: INTEGER; numBytes: LONGINT; VAR headerLen: INTEGER): OSErr;
  219.     {$IFC NOT GENERATINGCFM}
  220.     INLINE $203C, $0D48, $0014, $A800;
  221.     {$ENDC}
  222. FUNCTION SetupAIFFHeader(fRefNum: INTEGER; numChannels: INTEGER; sampleRate: UnsignedFixed; sampleSize: INTEGER; compressionType: OSType; numBytes: LONGINT; numFrames: LONGINT): OSErr;
  223.     {$IFC NOT GENERATINGCFM}
  224.     INLINE $203C, $0B4C, $0014, $A800;
  225.     {$ENDC}
  226. CONST
  227.     uppSIInterruptProcInfo = $1C579802; { Register PROCEDURE (4 bytes in A0, 4 bytes in A1, 2 bytes in D0, 4 bytes in D1); }
  228.     uppSICompletionProcInfo = $000000C0; { PROCEDURE (4 byte param); }
  229.  
  230. FUNCTION NewSIInterruptProc(userRoutine: SIInterruptProcPtr): SIInterruptUPP;
  231.     {$IFC NOT GENERATINGCFM }
  232.     INLINE $2E9F;
  233.     {$ENDC}
  234.  
  235. FUNCTION NewSICompletionProc(userRoutine: SICompletionProcPtr): SICompletionUPP;
  236.     {$IFC NOT GENERATINGCFM }
  237.     INLINE $2E9F;
  238.     {$ENDC}
  239.  
  240. PROCEDURE CallSIInterruptProc(inParamPtr: SPBPtr; dataBuffer: Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT; userRoutine: SIInterruptUPP);
  241.     {$IFC NOT GENERATINGCFM}
  242.     {To be implemented:  Glue to move parameters into registers.}
  243.     {$ENDC}
  244.  
  245. PROCEDURE CallSICompletionProc(inParamPtr: SPBPtr; userRoutine: SICompletionUPP);
  246.     {$IFC NOT GENERATINGCFM}
  247.     INLINE $205F, $4E90;
  248.     {$ENDC}
  249.  
  250. {$ALIGN RESET}
  251. {$POP}
  252.  
  253. {$SETC UsingIncludes := SoundInputIncludes}
  254.  
  255. {$ENDC} {__SOUNDINPUT__}
  256.  
  257. {$IFC NOT UsingIncludes}
  258.  END.
  259. {$ENDC}
  260.